#include <iostream>
#include <future>
#include <thread>
#include <memory>

int Add(int x,int y)
{
    return x+y;
}

int main()
{
    //注意：这里在栈上创建packaged_task对象进行传递的时注意作用域问题

    //1.创建packaged_task对象 
    auto task = std::make_shared<std::packaged_task<int(int,int)>>(Add);

    //2.获取futrue
    std::future<int> res = task->get_future();

    //3.通过线程执行任务
    std::thread thr([task](){
        (*task)(1,2);
    });

    //4.获取任务
    std::cout<<res.get()<<std::endl;

    //5.进行线程等待
    thr.join();

    return 0;
}